//使用基本定时器TIM6实现us延时
void TIM6_Delay_Init(void)
{
		 // 2. 配置 TIM6
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    // 1. 使能 TIM6 时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

   

    // 假设系统时钟 = 72MHz，APB1 预分频 = 2 → TIM6CLK = 72MHz（因为 STM32F103 有 x2 倍频）
    // 所以 TIM6 的输入时钟 = 72MHz

    // 要实现 1us 计数一次 → 预分频 = 72 - 1 = 71
    TIM_TimeBaseStructure.TIM_Prescaler = 71;          // 72MHz / (71+1) = 1MHz → 1us/tick
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;         // 最大计数值（65535 us ≈ 65.5ms）
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

    // 3. 不开启中断，不启动（由 delay_us 控制启停）
    TIM_Cmd(TIM6, DISABLE);
    TIM_SetCounter(TIM6, 0); // 清零计数器
}

void delay_us(uint32_t us)
{
    if (us == 0) return;

    // 支持最大延时：65535 us（因 16 位计数器）
    if (us > 65535) {
        // 可拆分为多次，或报错
        us = 65535;
    }

    // 1. 清零计数器
    TIM_SetCounter(TIM6, 0);

    // 2. 设置自动重载值（ARR = us - 1，因为从 0 开始计数）
    TIM_SetAutoreload(TIM6, us - 1);

    // 3. 启动定时器
    TIM_Cmd(TIM6, ENABLE);

    // 4. 等待更新事件标志（UEV）置位 → 表示计数完成
    while (TIM_GetFlagStatus(TIM6, TIM_FLAG_Update) == RESET);

    // 5. 清除更新标志（重要！否则下次会立即触发）
    TIM_ClearFlag(TIM6, TIM_FLAG_Update);

    // 6. 停止定时器（可选，节省功耗）
    TIM_Cmd(TIM6, DISABLE);
}